const express = require("express")
const app = express()
const path = require("node:path")
const fs = require("node:fs/promises")

let STUARR = require("./data/students.json")

app.set("view engine","ejs")
app.set("views",path.resolve(__dirname,"views"))
app.use(express.static(path.resolve(__dirname,"./public")))
app.use(express.urlencoded())

app.get("/students",(req,res) => {
    res.render("students",{ stus:STUARR})
})


// 添加信息的路由
app.post("/addstu",(req,res) => {
    // 生成一个id
    const id = STUARR.at(-1)?STUARR.at(-1).id + 1 : 1

    //1.获取用户的填写信息
    const newUser = {
        id,
        name:req.body.name,
        age:req.body.age,
        gender:req.body.gender,
        address:req.body.address
    }
    
    // 2.验证用户信息

    // 3.将信息添加到数组中
    STUARR.push(newUser)

    // 4.返回响应

    // 将新的数据写入到json中
    fs.writeFile(
        path.resolve(__dirname,"./data/students.json"),
        JSON.stringify(STUARR)
    ).then(() => {
            // res.redirect() 用来发起请求重新定向
            // 重新定向的作用是告诉浏览器你向另外的一个地址再发起一次请求
        res.redirect("/students")
    }).catch(() => {
            
    })
        
})

/* 
    删除
        -点击删除后，删除当前数据
        -点击XXX 删除 ——> 删除id为n的学生
        -流程
            1.点击删除的链接
            2.向路由器发送请求
            3.路由器怎么写？
                -获取学生的idn
                -删除id为n的学生
                -将新的数组写入文件
                -重新定向到学生列表页面
*/

// 删除信息的路由
app.get("/delstu",(req,res) => {
    // 获取到要删除的学生的id
    const id = +req.query.id
    console.log(id);
    // 根据id删除学生
    // 两个id类型不同 在前面加个+ 转换成字符串类型
    STUARR = STUARR.filter((stu) => stu.id !==id)
    fs.writeFile(
        path.resolve(__dirname,"./data/students.json"),
        JSON.stringify(STUARR)
    ).then(() => {
        res.redirect("/students")
    }).catch(() => {
            
    })
    
})

/* 
    -点击修改链接后，显示一个表单，表单应该有要修改的学生信息，
        用户对学生信息进行修改，修改以后点击按钮提交表单
    -流程：
        1.点击XXX的修改链接
        2.跳转到这个路由
            -这个路由会返回一个页面，页面有一个表单，表单中应该有XXX的信息
        3.用户填写表单，点击按钮提交到一个新的路由
            -获取学生信息，并对信息进行修改
*/

// 修改信息的路由
app.get("/revise",(req,res) => {
    const id = +req.query.id
    // 获取需要修改学生的信息
    const student = STUARR.find(item => item.id === id)
    res.render("revise",{student})
})

// 完成修改的路由
app.post("/comrevise",(req,res) => {
    // 获取id
    const id = req.query.id
    const{name,age,gender,address} = req.body
    // 修改学生信息
    // 根据学生的id获取学生的对象
   

    const student = STUARR.find(item => item.id == id)

    student.name = name
    student.age = +age
    student.gender = gender
    student.address = address
    
    fs.writeFile(
        path.resolve(__dirname,"./data/students.json"),
        JSON.stringify(STUARR)
    ).then(() => {
        res.redirect("/students")
    }).catch(() => {
            
    })
})




app.listen(4000,() => {
    console.log("服务器已启动");
})